package org.gary.base.service;

import java.util.List;

import lengreen.core.interfaces.Entity;

import org.gary.base.model.Category;
import org.gary.core.dto.CategoryDto;
import org.gary.core.factories.BasicServiceFactory;

/**
 * Category service接口
 * @author lengreen
 * 
 */
public interface CategoryService extends BasicServiceFactory<Category> {
	
	/**
	 * 列出所有Category的name
	 * @return
	 */
	public List<Object[]> list(String whoCategory, String lang);
	
	/**
	 * 取到所有顶级Category
	 * @param whoCategory
	 * @param lang
	 * @return
	 */
	public List<Object[]> listParent(String whoCategory, String lang);
	
	/**
	 * 检查name在数据库中是否存在
	 * @param name
	 * @return
	 */
	public boolean checkNameExist(String name, String lang);
	
	/**
	 * 得到该类别的所有子类别
	 * @param parentId
	 * @return
	 */
	public List<Category> children(int parentId);
	
	/**
	 * 通过Category id加载关联类别的xxx
	 * @param <T>
	 * @param entity
	 * @param categoryId
	 * @return
	 */
	public <T> List<T> loadXxxByCategory(Class<T> entity, int categoryId);
	
	/**
	 * 在删除之前查询数据库是否有数据
	 * @param categoryId
	 * @param entity
	 * @return
	 */
	public List<CategoryDto> preDelete(int categoryId, Class<? extends Entity> entity);
	
	/**
	 * 通过name加载Category、每个name在Category中是唯一存在的
	 * @param categoryName
	 * @return
	 */
	public Category loadCategoryByName(String categoryName, String lang);
	
	/**
	 * 根据ID得到种类名称
	 * @param id
	 * @return 种类
	 */
	public Category getCategory(int id);
	
	public List<Category> getList(String whoCategory,Object lang);
}